﻿using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Globalization;
using System.Web.Mvc;
using System.Web.Security;
using FileHelpers;

namespace Event_Planner.Models
{

    public class ChangePasswordModel
    {
        [Required]
        [DataType(DataType.Password)]
        [Display(Name = "Contraseña actual")]
        public string OldPassword { get; set; }

        [Required]
        [StringLength(100, ErrorMessage = "La {0} debe tener al menos {2} caracteres de longitud.", MinimumLength = 6)]
        [DataType(DataType.Password)]
        [Display(Name = "Nueva Contraseña")]
        public string NewPassword { get; set; }

        [DataType(DataType.Password)]
        [Display(Name = "Confirmar nueva Contraseña")]
        [Compare("NewPassword", ErrorMessage = "La contraseña y confirmacion de contraseña no son iguales.")]
        public string ConfirmPassword { get; set; }
    }

    public class LogOnModel
    {
        [Required]
        [Display(Name = "Nombre de Usuario")]
        public string UserName { get; set; }

        [Required]
        [DataType(DataType.Password)]
        [Display(Name = "Contraseña")]
        public string Password { get; set; }

        [Display(Name = "Recordarme?")]
        public bool RememberMe { get; set; }
    }

    public class RegisterModel
    {
        [Required]
        [Display(Name = "Nombre de Usuario")]
        public string UserName { get; set; }

        [Required]
        [DataType(DataType.EmailAddress)]
        [Display(Name = "Direccion de Email")]
        [RegularExpression(@"[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}",
           ErrorMessage = "La direccion  de Email no es valida.")]
        public string Email { get; set; }

        [Required]
        [StringLength(100, ErrorMessage = "La {0} debe tener al menos {2} caracteres de longitud.", MinimumLength = 6)]
        [DataType(DataType.Password)]
        [Display(Name = "Contraseña")]
        public string Password { get; set; }

        [DataType(DataType.Password)]
        [Display(Name = "Confirmar Contraseña")]
        [Compare("Password", ErrorMessage = "La contraseña y confirmacion de contraseña no son iguales.")]
        public string ConfirmPassword { get; set; }
       
    }


    public class UsuariosModel
    {
        [Key]
        [Required]
        [Display(Name = "Nombre de Usuario")]
        public string NombreUsuario { get; set; }

        [Required]
        [DataType(DataType.EmailAddress)]
        [Display(Name = "Direccion de Email")]
        [RegularExpression(@"[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}",
           ErrorMessage = "La direccion  de Email no es valida.")]
        public string EmailUsuario { get; set; }

        // Crea muchos eventos
        [Display(Name = "Eventos creados")]
        public virtual ICollection<EventosModels> EventosCreados { get; set; }

        // Tiene muchos contactos
        public virtual ICollection<ContactosModel> ContactosUsuario { get; set; }

        // Tiene muchos organizadores
        public virtual ICollection<OrganizadoresModel> OrganizadoresUsuario { get; set; }

    }

    public class ContactosModel
    {
        [Key]
        public int ID { get; set; }

        [Required]
        [Display(Name = "Nombre de Usuario")]
        public string NombreContacto { get; set; }

        [Required]
        [Display(Name = "Apellido de Usuario")]
        public string ApellidoContacto { get; set; }
       
        [Required]
        [DataType(DataType.EmailAddress)]
        [Display(Name = "Direccion de Email")]
        [RegularExpression(@"[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}",
           ErrorMessage = "La direccion  de Email no es valida.")]
        public string EmailContacto { get; set; }

        // Participa de muchos eventos y los confirma
        public virtual ICollection<EventoConfirmacion> EventosParticipantes { get; set; }

    }

    public class EventoConfirmacion
    {

        // ID propio de la confirmacion.
        [Key]
        public int IDConfirmacion { get; set; }

        public virtual ContactosModel Participante { get; set; }

        public virtual EventosModels Evento { get; set; }

        public bool Confirmacion { get; set; }
    }



    public class OrganizadoresModel
    {
        [Key]
        public int ID { get; set; }

        [Required]
        [Display(Name = "Nombre de Usuario")]
        public string NombreOrganizador { get; set; }

        [Required]
        [Display(Name = "Apellido de Usuario")]
        public string ApellidoOrganizador { get; set; }

        [Required]
        [DataType(DataType.EmailAddress)]
        [Display(Name = "Direccion de Email")]
        [RegularExpression(@"[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}",
           ErrorMessage = "La direccion  de Email no es valida.")]
        public string EmailOrganizador { get; set; }

        // Organiza muchos eventos
        public virtual ICollection<EventosModels> EventosOrganizados { get; set; }

    }


    public class SeleccionOrganizadoresModel
    {
        [Key]
        public int ID { get; set; }

        [Required]
        [Display(Name = "Nombre de Usuario")]
        public string NombreOrganizador { get; set; }

        [Required]
        [Display(Name = "Apellido de Usuario")]
        public string ApellidoOrganizador { get; set; }

        [Required]
        [DataType(DataType.EmailAddress)]
        [Display(Name = "Direccion de Email")]
        [RegularExpression(@"[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}",
           ErrorMessage = "La direccion  de Email no es valida.")]
        public string EmailOrganizador { get; set; }

        public bool AsociadoAlEvento { get; set; }

    }


    public class SeleccionContactosModel
    {
        [Key]
        public int ID { get; set; }

        [Required]
        [Display(Name = "Nombre de Usuario")]
        public string NombreContacto { get; set; }

        [Required]
        [Display(Name = "Apellido de Usuario")]
        public string ApellidoContacto { get; set; }

        [Required]
        [DataType(DataType.EmailAddress)]
        [Display(Name = "Direccion de Email")]
        [RegularExpression(@"[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}",
           ErrorMessage = "La direccion  de Email no es valida.")]
        public string EmailContacto { get; set; }

        public bool ParticipanteDelEvento { get; set; }

        public bool ParticipanteConfirmacionDelEvento { get; set; }
    }



    [DelimitedRecord(";")]
    public class CSVModel
    {
        public string Nombre { get; set; }

        public string Apellido { get; set; }

        public string Email { get; set; }
    }


}
